package com.base.cn.platform.os.entity.course.cou.record;


import com.base.cn.platform.os.common.mybatis.BaseEntity;
import com.base.cn.platform.os.entity.course.catalog.CourseCatalog;
import com.base.cn.platform.os.entity.course.cou.Course;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * 课程播放记录
 *
 * @author SK
 * @since 2018-06-13
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class CoursePlayRecord extends BaseEntity {

    // 前台用户id
    private BigDecimal userId;
    //套餐/课程ID（购买的课程ID）
    private BigDecimal buyCourseId;
    // 课程id
    private BigDecimal courseId;
    // 章节id
    private BigDecimal catalogId;
    // 播放来源 1.WEB 2.H5 3.APP 4.小程序
    private Integer source;
    // 随堂练习得分
    private Integer practice;
    // 是否完成观看 1.未完成 2.已完成
    private Integer finish;
    //学习时间
    private Integer duration;
    //======================

    //购买的课程对象
    private Course buyCourse;
    //播放的课程
    private Course course;
    //目录对象
    private CourseCatalog courseCatalog;
    //用户对象
    private Map<String, Object> user;
    //课程学习总时长
    private Integer durationNum;
    //课程一周学习总时长
    private Integer weekDurationNum;
    /**排序条件*/
    private int orderType;
    /**时间轴标记*/
    private String timeAxis;
    //课程章节学习总时长
    private Integer durationCatalogNum;
    /**
     * 学习时间 时分秒
     */
    private Map<String,String> durationMap;
    /**按照数据的更新时间查询 开始*/
    private Date beginUpdateTime;
    /**按照数据的更新时间查询 结束*/
    private Date endUpdateTime;
    /**该课程章节播放次数*/
    private Integer playNumber;
    /**查询条件 判断是前台查询还是其它端查询 0是前端 1是后端*/
    private int isAdmin;

    /**按照数据的更新时间查询 开始*/
    private Date toTime;
    /**按照数据的更新时间查询 结束*/
    private Date endTime;


    //单次最长学习时长
    private Integer maxDuration;
    /**
     * 获得随堂练习得分
     *
     * @return 随堂练习得分
     */
    public Integer getPractice() {
        return Objects.isNull(practice) ? 0 : practice;
    }

    /**
     * 未完成章节学习
     *
     * @return {@code true}未完成，否则返回{@code false}
     */
    public boolean nonFinished() {
        return finish != 2;
    }

    public Map<String,String> getDurationMap(){
        Integer _duration = this.getDuration();
        if(_duration!=null && _duration.intValue()>0){
            int h = _duration / (60 * 60);
            int m = (_duration % (60 * 60)) / 60;
            int s = (_duration % (60 * 60)) % 60;
            Map<String,String> map = new HashMap<>();
            map.put("h",String.valueOf(h));
            map.put("m",String.valueOf(m));
            map.put("s",String.valueOf(s));
            return map;
        }
        return null;
    }

}
